package cn.tedu.epidemic.webapi.mapper;

import cn.tedu.community.commons.pojo.forum.entity.Forum;
import cn.tedu.community.commons.pojo.forum.entity.ForumCollect;
import cn.tedu.community.commons.pojo.forum.entity.ForumLike;
import cn.tedu.community.commons.pojo.forum.vo.ForumListItemVO;
import cn.tedu.community.commons.pojo.forum.vo.ForumStandardVO;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * 论坛持久层
 */
@Repository
public interface ForumMapper {
    int insert(Forum forum);

    /**
     * 根据论坛id和用户id删除论坛
     * @param id 论坛id
     * @param userId 用户id
     */
    int deleteByIdAndUserId(@Param("id") Long id,@Param("userId")Long userId);

    /**
     * 根据论坛id和用户id更新论坛
     * @param forum 论坛实体类
     */
    int updateInfo(Forum forum);

    /**
     * 更新审核状态（管理员专用）
     * @param id 论坛id
     * @param status 状态
     */
    int updateAuditStatus(@Param("id") Long id, @Param("auditStatus") Integer status);

    /**
     * 根据论坛id和当前用户统计数量（用于判断当前论坛是否为当前用户发布的）
     */
    int countByIdAndUserId(@Param("forumId")Long forumId,@Param("userId")Long userId);

    /**
     * 根据论坛id查询详情
     * @param id
     */
    ForumStandardVO getStandardById(Long id);

    /**
     * 查询全部论坛
      */
    List<ForumListItemVO> forumList();

    /**
     * 查询全部未审核论坛
     */
    List<ForumListItemVO> ListUnaudited();

    /**
     * 查询全部已审核论坛（包括违规）
     */
    List<ForumListItemVO> ListAudited();

    /**
     * 根据当前用户查询发布的论坛
     * @param userId
     */
    List<ForumListItemVO> forumListByUserId(Long userId);

    /**
     * 根据论坛id和当前用户统计收藏数量
     */
    int countByIdUserId(@Param("forumId")Long forumId,@Param("userId")Long userId);

    /**
     * 根据论坛id和当前用户收藏论坛
     */
    int addCollect(ForumCollect forumCollect);

    /**
     * 根据论坛id和当前用户取消收藏论坛
     */
    int deleteCollect(@Param("forumId")Long forumId,@Param("userId")Long userId);

    /**
     * 根据论坛id删除所有收藏
     */
    int deleteCollectByForumId(Long forumId);

    /**
     * 根据论坛id删除所有点赞
     */
    int deleteLikeByForumId(Long forumId);

    /**
     * 根据论坛id统计收藏数量
     */
    int countCollectByForumId(Long forumId);

    /**
     * 根据当前用户和论坛id点赞论坛
     */
    int addLike(ForumLike forumLike);

    /**
     * 根据当前用户和论坛id取消点赞
     */
    int deleteLike(@Param("forumId")Long forumId,@Param("userId")Long userId);

    /**
     * 根据论坛id和当前统计点赞数量
     */
    int countByForumIdUserId(@Param("forumId")Long forumId,@Param("userId")Long userId);

    /**
     * 根据论坛id统计点赞数量
     */
    int countLikeByForumId(Long forumId);

    /**
     * 根据当前用户id查询收藏的论坛
     */
    List<ForumListItemVO> getCollectList(Long userId);
}
